"""
用递归反转一个字符串（如 "abc"→"cba"）。

算法总结该递归的核心逻辑是：
将字符串拆分为‘最后一个字符’和‘剩余子串’，递归反转剩余子串后，将“最后一个字符”拼在最前面
通过不断拆分和回溯拼接，实现整个字符串的反转。
时间复杂度为O(n)（n是字符串长度，每个字符都会被处理一次），
空间复杂度为O(n)（递归栈的深度最多为n）。


"""

def reverse_string(s):
    """递归反转字符串"""
    # 基线条件：空字符串或单字符字符串，直接返回自身
    #当字符串 s 的长度小于等于 1时（空字符串或单字符字符串），直接返回自身（因为无需反转）。这是递归的 “终止点”，避免无限递归。
    if len(s) <= 1:
        return s
    # 递归条件：取最后一个字符 + 反转剩余子串
    #s[-1]：取字符串的最后一个字符（作为反转后字符串的 “第一个字符”）。
    # s[:-1]：取字符串除最后一个字符外的剩余子串（例如 s="abc"，则 s[:-1] 是 "ab"）。
    # reverse_string(s[:-1])：对剩余子串递归调用反转函数，得到剩余子串的反转结果。
    # 最终将 “最后一个字符” 与 “剩余子串的反转结果” 拼接，得到整个字符串的反转结果。
    return s[-1] + reverse_string(s[:-1])

# 测试
if __name__ == "__main__":
    print(reverse_string("hello"))  # 输出: "olleh"
    print(reverse_string("python")) # 输出: "nohtyp"

    s = "abcdefg"
    print(s[:-1]) #abcdef
    print(s[:-2])  # abcde